package furns.service.impl;

import furns.dao.FurnDAO;
import furns.dao.OrderDAO;
import furns.dao.OrderItemDAO;
import furns.dao.impl.FurnDAOImpl;
import furns.dao.impl.OrderDAOImpl;
import furns.dao.impl.OrderItemDAOImpl;
import furns.entity.*;
import furns.service.OrderService;

import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class OrderServiceImpl implements OrderService {
    private OrderDAO orderDAO = new OrderDAOImpl();
    private OrderItemDAO orderItemDAO = new OrderItemDAOImpl();
    private FurnDAO furnDAO = new FurnDAOImpl();

    //javaee分层的好处 , 在service层, 通过组合多个dao的方法，完成某个业务
    @Override
    public String saveOrder(int memberId, Cart cart) {
        //因为生成订单会操作多表，因此会涉及到多表事务的问题 ThreadLocal+Mysql事务机制+过滤器
        //关于事务的处理，考虑的点比较多，后面专门处理

        //1.生成order订单
        //订单id,生成一个不重复的UUID
        String id = System.currentTimeMillis() + "" + memberId;
        //订单日期
        Date date = new Date();
        //所有商品金额
        BigDecimal totalPrice = cart.getTotalPrice();
        int status = 0;
        Order order = new Order(id, date, totalPrice, status, memberId);
        //加入数据库
        orderDAO.saveOrder(order);

        //2.生成订单项
        Set<Integer> keys = cart.getItems().keySet();
        for (Integer key : keys) {
            CartItem cartItem = cart.getItems().get(key);
            //生成orderItem订单
            OrderItem orderItem = new OrderItem(null, cartItem.getName(), cartItem.getPrice(), cartItem.getCount(), cartItem.getTotalPrice(), id);
            //加入数据库
            orderItemDAO.saveOrderItem(orderItem);

            //3.更新furn家居表的销量和库存
            //(1) 获取到furn对象
            Furn furn = furnDAO.queryFurnById(key);
            //(2) 更新一下这个furn的sales销量, stock存量
            furn.setSales(furn.getSales() + cartItem.getCount());
            furn.setStock(furn.getStock() - cartItem.getCount());
            //(3) 更新到数据表
            furnDAO.updateFurn(furn);
        }

        //第二种去hashmap的方法
//        for (Map.Entry<Integer, CartItem> entry : cart.getItems().entrySet()) {
//            CartItem item = entry.getValue();
//            //通过cartItem对象构建了OrderItem
//            OrderItem orderItem = new OrderItem(null, item.getName(), item.getPrice(),
//                    item.getCount(), item.getTotalPrice(), orderId);
//
//            //保存
//            orderItemDAO.saveOrderItem(orderItem);
//
//            //更新一把furn表的sales销量, stock存量
//            //(1) 获取到furn对象
//            Furn furn = furnDAO.queryFurnById(item.getId());
//            //(2) 更新一下这个furn的sales销量, stock存量
//            furn.setSales(furn.getSales() + item.getCount());
//            furn.setStock(furn.getStock() - item.getCount());
//            //(3) 更新到数据表
//            furnDAO.updateFurn(furn);
//
//        }
        //清空购物车
        cart.clearItem();
        return id;
    }
}
